#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
在工厂模式设计中，客户端可以请求一个对象，而无需知道这个对象来自哪里（使用类来生成对象）。
工厂背后的思想是简化对象的创建，基于一个中心化的函数来实现创建对象，更易于追踪创建了哪些对象。
通过将创建对象的代码和使用对象的代码解耦，工厂能够降低应用维护的复杂度。
在工厂方法中，通过执行单个函数，传入一个参数（表名想要什么），但是并不要求知道对象是如何实现以及对象来自哪里。
"""

class Person():
    def __init__(self):
        self.name = None
        self.gender = None

    def getName(self):
        return self.name

    def getGender(self):
        return self.gender


class Male(Person):
    def __init__(self, name):
        super(Male, self).__init__()
        print(name)

class Female(Person):
    def __init__(self, name):
        super(Female, self).__init__()
        print(name)

class Factory():
    def getPerson(self, name, gender):
        if gender == "M":
            return Male(name)
        if gender == "F":
            return Female(name)

if __name__ == '__main__':
    factory = Factory()
    person = factory.getPerson("Waltz", "M")